import { Entity, Column, ManyToMany, JoinTable } from "typeorm";
import { Base } from "@/entities.base/base.entity";
import { Role } from "../role.entity";

/** 启用状态 */
export enum EnabledStatusEnum {
    /** 启用 */
    ENABLED = '1',

    /** 禁用 */
    DISABLED = '2',
}

@Entity({ comment: '用户表', name: 'sys_user' })
export class User extends Base {

    /** 用户名 */
    @Column({
        comment: '用户名',
        length: 50,
        unique: true // 添加唯一约束
    })
    username: string;

    /** 密码 */
    @Column({
        comment: '密码',
        length: 100,
    })
    password: string;

    /** 昵称 */
    @Column({
        comment: '昵称',
        length: 50,
    })
    nickname: string;

    /** 邮箱 */
    @Column({
        comment: '邮箱',
        length: 100,
        unique: true, // 添加唯一约束
        nullable: true, // 手机可以为空
    })
    email: string;

    /** 手机 */
    @Column({
        comment: '手机',
        length: 20,
        nullable: true, // 手机可以为空
    })
    phone?: string;

    /** 启用状态 */
    @Column({
        comment: '启用状态',
        default: EnabledStatusEnum.ENABLED,
        type: 'enum',
        enum: EnabledStatusEnum,
        enumName: 'sys_user_enabled_status_enum',
    })
    enabledStatus: EnabledStatusEnum;

    /** 备注 */
    @Column({
        type: 'text',
        comment: '备注',
        nullable: true, // 备注可以为空
    })
    remarks?: string;

    /** 用户角色 */
    @ManyToMany(() => Role, role => role.users)
    @JoinTable({
        name: 'sys_user_role',
        joinColumn: { name: 'user_id', referencedColumnName: 'id' },
        inverseJoinColumn: { name: 'role_id', referencedColumnName: 'id' }
    })
    roles: Role[];
}

